---
hide_table_of_contents: true
sidebar_position: 1
---

# OpenAI tools

:::tip Compatibility
OpenAI tool calling is new and only available on [OpenAI's latest models](https://platform.openai.com/docs/guides/function-calling).
:::

Certain OpenAI models have been finetuned to work with tool calling. This is very similar but different from function calling, and thus requires a separate agent type.

While the goal of more reliably returning valid and useful function calls is the same as the functions agent, the ability to return multiple tools at once results in
both fewer roundtrips for complex questions.

## Setup

Install the OpenAI integration package, retrieve your key, and store it as an environment variable named `OPENAI_API_KEY`:

import IntegrationInstallTooltip from "@mdx_components/integration_install_tooltip.mdx";

<IntegrationInstallTooltip></IntegrationInstallTooltip>

```bash npm2yarn
npm install @langchain/openai
```

This demo also uses [Tavily](https://app.tavily.com), but you can also swap in another [built in tool](/docs/integrations/platforms).
You'll need to sign up for an API key and set it as `TAVILY_API_KEY`.

## Initialize Tools

We will first create a tool:

```typescript
import { TavilySearchResults } from "@langchain/community/tools/tavily_search";

// Define the tools the agent will have access to.
const tools = [new TavilySearchResults({ maxResults: 1 })];
```

## Create Agent

```typescript
import { AgentExecutor, createOpenAIToolsAgent } from "langchain/agents";
import { pull } from "langchain/hub";
import { ChatOpenAI } from "@langchain/openai";
import type { ChatPromptTemplate } from "@langchain/core/prompts";

// Get the prompt to use - you can modify this!
// If you want to see the prompt in full, you can at:
// https://smith.langchain.com/hub/hwchase17/openai-tools-agent
const prompt = await pull<ChatPromptTemplate>("hwchase17/openai-tools-agent");

const llm = new ChatOpenAI({
  modelName: "gpt-3.5-turbo-1106",
  temperature: 0,
});

const agent = await createOpenAIToolsAgent({
  llm,
  tools,
  prompt,
});
```

## Run Agent

Now, let's run our agent!

:::tip
[LangSmith trace](https://smith.langchain.com/public/5c125a7e-0df5-41ec-96bf-3c13dc3a53f8/r)
:::

```ts
const agentExecutor = new AgentExecutor({
  agent,
  tools,
});

const result = await agentExecutor.invoke({
  input: "what is LangChain?",
});

console.log(result);

/*
  {
    input: 'what is LangChain?',
    output: 'LangChain is a platform that offers a complete set of powerful building blocks for building context-aware, reasoning applications with flexible abstractions and an AI-first toolkit. It provides tools for chatbots, Q&A over docs, summarization, copilots, workflow automation, document analysis, and custom search. LangChain is used by global corporations, startups, and tinkerers to build applications powered by large language models (LLMs). You can find more information on their website: [LangChain](https://www.langchain.com/)'
  }
*/
```

## Using with chat history

For more details, see [this section of the agent quickstart](/docs/modules/agents/quick_start#adding-in-memory).

```ts
import { AIMessage, HumanMessage } from "@langchain/core/messages";

const result2 = await agentExecutor.invoke({
  input: "what's my name?",
  chat_history: [
    new HumanMessage("hi! my name is cob"),
    new AIMessage("Hello Cob! How can I assist you today?"),
  ],
});

console.log(result2);

/*
  {
    input: "what's my name?",
    chat_history: [
      HumanMessage {
        content: 'hi! my name is cob',
        additional_kwargs: {}
      },
      AIMessage {
        content: 'Hello Cob! How can I assist you today?',
        additional_kwargs: {}
      }
    ],
    output: 'Your name is Cob!'
  }
*/
```
